package com.paireach.scmc.utils;

import android.text.TextUtils;

import com.google.gson.Gson;

import org.json.JSONException;
import org.json.JSONObject;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

public class GsonUtil {
    /**
     * 1 json  ---> map<>   2 map<> --->json
     * 3 json  ---> list    4 list  ---> json
     * 5 json  ---> bean    6 bean  ---> json
     */
    //json  ---> map<>  Type type = new TypeToken<HashMap<String, Object>>() {}.getType();
    public static Map<String, Object> jsonToMap(String json, Type type) {
        if (json != null) {
            Gson gson = new Gson();
            return gson.fromJson(json, type);
        } else {
            return null;
        }
    }

    //json  ---> list   new TypeToken<List<?>>() {}.getType()
    public static List<?> jsonToList(String json, Type type) {
        if (json != null) {
            Gson gson = new Gson();
            return gson.fromJson(json, type);
        } else {
            return null;
        }
    }
    
    //json  ---> bean
    public static <T> T jsonToBean(String json, Class<T> clazz) {
        if (json != null) {
            Gson gson = new Gson();
            return gson.fromJson(json, clazz);
        } else {
            return null;
        }
    }

    //map<> --->json
    public static String mapToJson(Map<String, Object> map) {
        if (map != null) {
            Gson gson = new Gson();
            return gson.toJson(map);
        } else {
            return null;
        }
    }


    // list  ---> json
    public static String listToJson(List<?> list) {
        if (list != null) {
            Gson gson = new Gson();
            return gson.toJson(list);
        } else {
            return null;
        }
    }

    //bean  ---> json
    public static <T> String beanToJson(Class<T> clazz) {
        if (clazz != null) {
            Gson gson = new Gson();
            return gson.toJson(clazz);
        } else {
            return null;
        }
    }

    /**
     * 获取json串中某个字段的值，注意，只能获取同一层级的value
     *
     * @param json
     * @param key
     * @return
     */
    public static String getFieldValue(String json, String key) {
        if (TextUtils.isEmpty(json))
            return null;
        if (!json.contains(key))
            return "";
        JSONObject jsonObject = null;
        String value = null;
        try {
            jsonObject = new JSONObject(json);
            value = jsonObject.getString(key);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return value;
    }
}
